// 空对象
const obj = {}
// obj.a = 123 // 报错

obj.toString() // 继承属性  不报错

// TypeScript 不允许动态添加属性，所以对象不能分步生成，必须生成时一次性声明所有属性
const pt = {}
// pt.a = 1
// pt.b = 2

const pt02 = {
  a: 1,
  b: 2,
}

let d: {}

// 因为Object可以接受各种类型的值
// 而空对象是Object类型的简写，所以它不会有严格字面量检查
d = {}
d = { x: 1 }
d = 'hello'
d = 2
// d = null
// d = undefined

interface Empty {}

// 变量b的类型是空对象，视同Object类型，不会有严格字面量检查，但是读取多余的属性会报错
const b: Empty = { myProp: 1, anotherProp: 2 }
// b.myProp

interface WithoutProperties {
  [key: string]: never
}

const c: WithoutProperties = {
  // a: 1
}
